package com.example.kotlin_test

class MyClass (private val name:String){
    fun greet(){
        println("Hello $name")
    }
}


//可变长参数函数
fun vars(vararg v:Int){
    for(vt in v){
        print(vt)
    }
}

/*

//类型后面加?表示可为空
var age: String? = "23"
//抛出空指针异常
val ages = age!!.toInt()
//不做处理返回 null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt() ?: -1

*/

fun test1()
{
    print("循环输出：")
    for (i in 1..4) print(i) // 输出“1234”
    println("\n----------------")
    print("设置步长：")
    for (i in 1..4 step 2) print(i) // 输出“13”
    println("\n----------------")
    print("使用 downTo：")
    for (i in 4 downTo 1 step 2) print(i) // 输出“42”
    println("\n----------------")
    print("使用 until：")
    // 使用 until 函数排除结束元素
    for (i in 1 until 4) {   // i in [1, 4) 排除了 4
        print(i)
    }
    println("\n----------------")
}

fun test2()
{
    val a:Int=1000
    println(a===a)

    val boxedA:Int?=a
    val anotherBoxedA:Int?=a

    println(boxedA===anotherBoxedA)
    println(boxedA==anotherBoxedA)
}

fun  test3(){
    var x=0
    if(x>0){
        println("x 大于 0")
    }else if(x==0){
        println("x 等于 0")
    }else{
        println("x 小于 0")
    }

    var a = 1
    var b = 2
    val c = if (a>=b) a else b //三元操作
    println("c 的值为 $c")
}

//when 也可以用来取代 if-else if链
fun test4()
{
    var x=0;
    when(x){
        0, 1 -> println("x == 0 or x == 1")
        else-> println("otherwise")
    }
    when(x) {
        1 -> println("x==1")
        2 -> println("x==2")
        else->{
            println("x不是1，也不是2")
        }
    }

    when(x){
        in 0..10 -> println("x 在该区间范围内")
        else -> println("x 不在该区间范围内")
    }
}


fun test5(){
    println("----while 使用-----")
    var x = 5
    while(x>0){
        println(x--)
    }

    println("----do...while 使用-----")
    var y = 5
    do{
        println(y--)
    }while (y>0)


}



fun main(args:Array<String>){
    MyClass("World!").greet()
    vars(1,2,3,4,5,6,7,8,9)

    //lambda(匿名函数)
    val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
    println(sumLambda(1,2))  // 输出 3

    //test1()
    //test2()
    test3()
    test4()
    test5()



}



